package com.edou.cms.service;

import java.util.List;

import com.edou.base.page.PageResult;
import com.edou.cms.dto.CmsArticleCondition;
import com.edou.cms.entity.CmsArticle;

/**
 * 
 * 文章管理接口
 * @author 欧阳明航
 *
 */
public interface ICmsArticleService {
	
	/**
	 * 前端页面查询对应栏目下的文章-区间数据
	 * @param pageResult
	 * @param condition
	 */
	void listArticleListByPage(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	
	/**
	 * 批量推荐
	 * @param articleId
	 * @param isRecommend
	 */
	void recommend(String[] articleId,Integer isRecommend);
	
	/**
	 * 批量修改状态
	 */
	void updateState(String[] articleId,Integer state);
	
	/**
	 * 添加文章
	 * @param item
	 */
	void doSave(CmsArticle item);
	
	/**
	 * 分页查询
	 * @param pageResult 分页对象
	 * @param condition 查询条件类
	 */
	void listCmsColumnArticleByPageAndSection(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	
	/**
	 * 博主文章的分页 
	 * @param pageResult
	 * @param condition
	 */
	void listBlogArticleListByPage(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	/**
	 *  修改文章
	 * @param item
	 */
	void doUpdate(CmsArticle item);
	
	/**
	 * 更新文章的图片路径
	 * @param item
	 */
	void updateImagePath(CmsArticle item);
	
	/**
	 *  修改博主文章
	 * @param item
	 */
	void doUpdateBlog(CmsArticle item);
	
	/**
	 * 分页查询文章
	 * @param pageResult
	 * @param condition
	 */
	void getArticleListByPage(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	/**
	 * 分页查询文章
	 * @param pageResult
	 * @param condition
	 */
	void getArticleListByPageOrderByReady(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	/**
	 * 批量删除文章
	 * @param articleId
	 */
	void delArticle(String articleId);
	void publish(String articleId);
	void unPublish(String articleId);
	
	/**
	 * 为当前文章加上一次阅读数量
	 * @param articleId
	 */
	void readOnce(String articleId);
	
	/**
	 * 为当前文章加上一次点赞数量
	 * @param articleId
	 */
	void likeOnce(String articleId);
	
	/**
	 * 根据栏目ID查询栏目下是否有文章
	 * @param channelId
	 * @return
	 */
	int getArticleCount(String channelId);
	/**
	 * 根据栏目ID查询所有文章
	 * @param channleId
	 * @return
	 */
	List<CmsArticle> getArticleByChannelId(String channleId);
	
	
	/**
	 * 根据栏目父级id得到所有子级的文章包括本身  - 分页
	 */
	void listArticleByChannelParentIdPage(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	
	/**
	 * 根据栏目父级id得到所有子级的文章包括本身  - 不分页
	 */
	List<CmsArticle> listArticleByChannelParentIdAll(CmsArticleCondition condition);

	/**
	 * 根据sortIndex查询得到上下篇文章
	 */
	CmsArticle getArticleBySortIndex(Integer sortIndex);
	

	
	/**
	 * 根据ID查询详细信息
	 * @param id
	 * @return
	 */
	CmsArticle getArticleById(String id);
	
	/**
	 * 查看文章列表
	 * @param id
	 * @return
	 */
	CmsArticle getArticleByArticleId(String id);
	/**
	 * 查询所有文章
	 * @return
	 */
	List<CmsArticle> getArticleAll();
	
	/**
	 * 查询类别下的某几篇文章
	 * @param cid	类别ID
	 * @param limit	限制几篇文章 null或者0表示不限数量
	 */
	List<CmsArticle> listArticleByCidLimit(String cid, Integer limit);
	
	/**
	 * 查询类别下的最新发布的前几篇文章
	 * @param cid	类别ID
	 * @param limit	限制几篇文章 null或者0表示不限数量
	 */
	List<CmsArticle> listNewArticleByCidLimit(String cid, Integer limit);
	
	/**
	 *  查询专栏下对应标签下的热门文章
	 * @param columnId
	 * @param cid
	 * @param limit
	 * @return
	 */
	List<CmsArticle> listNewArticleByColumnIdLimit(String columnId,String cid,Integer limit);
	
	/**
	 * 查询文章
	 * @param channelId  栏目id
	 * @param limit  条数
	 * @return
	 */
	List<CmsArticle> listCmsArticleRecomend(String channelId ,Integer limit);
	
	
	/**
	 * 查询推荐文章-首页热点资讯
	 * @param channelId  栏目id
	 * @param limit  条数
	 * @return
	 */
	List<CmsArticle> listCmsArticleByRecomend(CmsArticleCondition condition ,Integer limit);
	
	/**
	 * 根据ID查询博主发布的文章详细信息
	 * @param id
	 * @return
	 */
	CmsArticle getBlogArticleById(String id);
	
	/**
	 * 近期更新
	 * @param channelId  栏目id
	 * @param limit  条数
	 * @return
	 */
	List<CmsArticle> listCmsArticleByBestNew(Integer limit);
	
	/**
	 * 热点资讯
	 * @param channelId  栏目id
	 * @param limit  条数
	 * @return
	 */
	List<CmsArticle> listCmsArticleByHot(Integer limit);
	
	/**
	 * 统计整站点击率
	 * @return
	 */
	int getClickRate();
	
	/**
	 *  一周热点
	 * @param condition
	 * @param limit
	 * @return
	 */
	List<CmsArticle> listCmsArticleByBestWeek(CmsArticleCondition condition ,Integer limit);
	
	/**
	 * 自媒体热点关注
	 * @return
	 */
	List<CmsArticle> listCmsArticleByWeekTop();
	
	List<CmsArticle> getArticleByCondition(String parentId);
	/**
	 * 获得上一条记录
	 * @param mark
	 * @return
	 */
	CmsArticle getArticlePrev(String parentId,Integer mark);
	/**
	 * 获得下一条记录
	 * @param mark
	 * @return
	 */
	CmsArticle getArticleNext(String parentId,Integer mark);
	/**
	 * 根据栏目ID获得分页数据
	 * @param bounds
	 * @param condition
	 * @return
	 */
	void listArticleByChannelIdAndPage(PageResult<CmsArticle> pageResult,CmsArticleCondition condition);
	
	/**
	 * 根据栏目的编码模糊查询文章 -- 方泉 2016-07-22
	 * @param channelCode	栏目编码：类似0001-0002
	 * @param limit			限定数量
	 * @return
	 */
	List<CmsArticle> listArticleByChannelCodeLimit(String channelCode, Integer limit);
	
	/**
	 * 根据标签id查询文章
	 * @param tagId
	 * @return
	 */
	List<CmsArticle> listArticleByTagId(String tagId);
	
	/**
	 * 每个标签下取最新的limit文章数据，并且保证文章数据不重复
	 * @param tagId
	 * @param condition
	 * @param limit
	 * @return
	 */
	List<CmsArticle> listArticleNewLimitByTagIdNotInArticle(String tagId,CmsArticleCondition condition,Integer limit);
	
	/**
	 * 根据条件查询文章
	 */
	List<CmsArticle> listArticleByCondition(CmsArticleCondition condition);
}
